home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / GEM / VDIESCAP.I < prev    next >
Encoding:
Modula Implementation  |  1993-12-10  |  11.5 KB  |  450 lines

  1. IMPLEMENTATION MODULE VDIEscapes;
  2. (*$L-, N-, Y+*)
  3.  
  4.  
  5. (*      Implementation der MEGAMAX MODULA II GEM Library (Escape-Funk.)
  6.  *
  7.  *      geschrieben von Manuel Chakravarty
  8.  *
  9.  *      Version 2.2     V#0038      Erstellt März-Oktober 1987
  10.  *)
  11.  
  12. (*  ???????? TT  V2.1   | REF-Parm.
  13.  *  02.04.90 MCH V2.2   | Anpassung auf public arrays
  14.  *  15.09.91 MS         | WriteToMetafile korrigiert
  15.  *)
  16.  
  17.  
  18. FROM    SYSTEM          IMPORT ASSEMBLER, ADDRESS;
  19.  
  20. FROM    GrafBase        IMPORT Point, Rectangle;
  21.  
  22. IMPORT  GEMShare;
  23.  
  24. FROM    GEMEnv          IMPORT DeviceHandle;
  25.  
  26. (*$I GEMOPS.ICL *)
  27.  
  28.  
  29. PROCEDURE GetCharCells(handle:DeviceHandle;VAR rows,columns:CARDINAL);
  30.  
  31. BEGIN
  32.   ASSEMBLER
  33.         MOVE.L  -12(A3),(A3)+
  34.         MOVE.W  #ESCAPE,(A3)+
  35.         MOVE.W  #VQ_CHCELLS,(A3)+
  36.         JSR     vdi_if
  37.         MOVE.L  pubs,A0
  38.         MOVE.L  -(A3),A1
  39.         MOVE.W  pubArrays.vINTOUT+2(A0),(A1)
  40.         MOVE.L  -(A3),A1
  41.         MOVE.W  pubArrays.vINTOUT(A0),(A1)
  42.         SUBQ.L  #4,A3
  43.   END;
  44. END GetCharCells;
  45.  
  46. PROCEDURE ExitCursorMode(handle:DeviceHandle);
  47.  
  48. BEGIN
  49.   ASSEMBLER
  50.         MOVE.W  #ESCAPE,(A3)+
  51.         MOVE.W  #V_EXIT_CUR,(A3)+
  52.         JSR     vdi_if
  53.   END;
  54. END ExitCursorMode;
  55.  
  56. PROCEDURE EnterCursorMode(handle:DeviceHandle);
  57.  
  58. BEGIN
  59.   ASSEMBLER
  60.         MOVE.W  #ESCAPE,(A3)+
  61.         MOVE.W  #V_ENTER_CUR,(A3)+
  62.         JSR     vdi_if
  63.   END;
  64. END EnterCursorMode;
  65.  
  66. PROCEDURE CursorUp(handle:DeviceHandle);
  67.  
  68. BEGIN
  69.   ASSEMBLER
  70.         MOVE.W  #ESCAPE,(A3)+
  71.         MOVE.W  #V_CURUP,(A3)+
  72.         JSR     vdi_if
  73.   END;
  74. END CursorUp;
  75.  
  76. PROCEDURE CursorDown(handle:DeviceHandle);
  77.  
  78. BEGIN
  79.   ASSEMBLER
  80.         MOVE.W  #ESCAPE,(A3)+
  81.         MOVE.W  #V_CURDOWN,(A3)+
  82.         JSR     vdi_if
  83.   END;
  84. END CursorDown;
  85.  
  86. PROCEDURE CursorRight(handle:DeviceHandle);
  87.  
  88. BEGIN
  89.   ASSEMBLER
  90.         MOVE.W  #ESCAPE,(A3)+
  91.         MOVE.W  #V_CURRIGHT,(A3)+
  92.         JSR     vdi_if
  93.   END;
  94. END CursorRight;
  95.  
  96. PROCEDURE CursorLeft(handle:DeviceHandle);
  97.  
  98. BEGIN
  99.   ASSEMBLER
  100.         MOVE.W  #ESCAPE,(A3)+
  101.         MOVE.W  #V_CURLEFT,(A3)+
  102.         JSR     vdi_if
  103.   END;
  104. END CursorLeft;
  105.  
  106. PROCEDURE CursorHome(handle:DeviceHandle);
  107.  
  108. BEGIN
  109.   ASSEMBLER
  110.         MOVE.W  #ESCAPE,(A3)+
  111.         MOVE.W  #V_CURHOME,(A3)+
  112.         JSR     vdi_if
  113.   END;
  114. END CursorHome;
  115.  
  116. PROCEDURE EraseToEndOfScreen(handle:DeviceHandle);
  117.  
  118. BEGIN
  119.   ASSEMBLER
  120.         MOVE.W  #ESCAPE,(A3)+
  121.         MOVE.W  #V_EEOS,(A3)+
  122.         JSR     vdi_if
  123.   END;
  124. END EraseToEndOfScreen;
  125.  
  126. PROCEDURE EraseToEndOfLine(handle:DeviceHandle);
  127.  
  128. BEGIN
  129.   ASSEMBLER
  130.         MOVE.W  #ESCAPE,(A3)+
  131.         MOVE.W  #V_EEOL,(A3)+
  132.         JSR     vdi_if
  133.   END;
  134. END EraseToEndOfLine;
  135.  
  136. PROCEDURE LocateCursor(handle:DeviceHandle;column,row:CARDINAL);
  137.  
  138. BEGIN
  139.   ASSEMBLER
  140.         MOVE.L  pubs,A0
  141.         MOVE.L  -(A3),D0
  142.         SWAP    D0
  143.         MOVE.L  D0,pubArrays.vINTIN(A0)
  144.         MOVE.W  #ESCAPE,(A3)+
  145.         MOVE.W  #VS_CURADDRESS,(A3)+
  146.         JSR     vdi_if
  147.   END;
  148. END LocateCursor;
  149.  
  150. PROCEDURE CursorText(handle:DeviceHandle;REF str:ARRAY OF CHAR);
  151.  
  152. BEGIN
  153.   ASSEMBLER
  154.         MOVE.L  D4,-(A7)
  155.         CLR.W   D4                      ; Kein Offset
  156.         JSR     stringIntoINTIN
  157.         MOVE.W  -(A3),D0                ; Rückgabewert: Stringlänge
  158.         
  159.         MOVE.W  D0,-(A7)
  160.         SUBQ.L  #2,A7
  161.         MOVE.L  A7,(A3)+
  162.         JSR     setDevice
  163.         MOVE.W  (A7)+,D1
  164.         MOVE.W  (A7)+,D0
  165.         TST.W   D1
  166.         BEQ     ende
  167.         
  168.         MOVE.L  our_cb,A0
  169.         MOVE.L  A0,(A3)+                ; our_cb^ für vdi_call pushen
  170.         MOVE.W  #ESCAPE,cb.V_CONTRL.opcode(A0)
  171.         CLR.W   cb.V_CONTRL.sptsin(A0)
  172.         MOVE.W  D0,cb.V_CONTRL.sintin(A0)
  173.         MOVE.W  #V_CURTEXT,cb.V_CONTRL.subcmd(A0)
  174.         MOVE.L  cb.CURDEVICE(A0),A1
  175.         MOVE.W  device.handle(A1),cb.V_CONTRL.handle(A0)
  176.         JSR     vdi_call
  177. ende
  178.         MOVE.L  (A7)+,D4
  179.   END;
  180. END CursorText;
  181.  
  182. PROCEDURE ReverseVideoOn(handle:DeviceHandle);
  183.  
  184. BEGIN
  185.   ASSEMBLER
  186.         MOVE.W  #ESCAPE,(A3)+
  187.         MOVE.W  #V_RVON,(A3)+
  188.         JSR     vdi_if
  189.   END;
  190. END ReverseVideoOn;
  191.  
  192. PROCEDURE ReverseVideoOff(handle:DeviceHandle);
  193.  
  194. BEGIN
  195.   ASSEMBLER
  196.         MOVE.W  #ESCAPE,(A3)+
  197.         MOVE.W  #V_RVOFF,(A3)+
  198.         JSR     vdi_if
  199.   END;
  200. END ReverseVideoOff;
  201.  
  202. PROCEDURE GetCursorLocation(handle:DeviceHandle;VAR column,row:CARDINAL);
  203.  
  204. BEGIN
  205.   ASSEMBLER
  206.         MOVE.L  -12(A3),(A3)+
  207.         MOVE.W  #ESCAPE,(A3)+
  208.         MOVE.W  #VQ_CURADDRESS,(A3)+
  209.         JSR     vdi_if
  210.         MOVE.L  pubs,A0
  211.         MOVE.L  -(A3),A1
  212.         MOVE.W  pubArrays.vINTOUT(A0),(A1)
  213.         MOVE.L  -(A3),A1
  214.         MOVE.W  pubArrays.vINTOUT+2(A0),(A1)
  215.         SUBQ.L  #4,A3
  216.   END;
  217. END GetCursorLocation;
  218.  
  219. PROCEDURE TabletStatus(handle:DeviceHandle):BOOLEAN;
  220.  
  221. BEGIN
  222.   ASSEMBLER
  223.         MOVE.W  #ESCAPE,(A3)+
  224.         MOVE.W  #VQ_TABSTATUS,(A3)+
  225.         JSR     vdi_if
  226.         MOVE.L  pubs,A0
  227.         MOVE.W  pubArrays.vINTOUT(A0),(A3)+
  228.   END;
  229. END TabletStatus;
  230.  
  231. PROCEDURE HardCopy(handle:DeviceHandle);
  232.  
  233. BEGIN
  234.   ASSEMBLER
  235.         MOVE.W  #ESCAPE,(A3)+
  236.         MOVE.W  #V_HARDCOPY,(A3)+
  237.         JSR     vdi_if
  238.   END;
  239. END HardCopy;
  240.  
  241. PROCEDURE DisplayCursor(handle:DeviceHandle;row,column:CARDINAL);
  242.  
  243. BEGIN
  244.   ASSEMBLER
  245.         MOVE.L  pubs,A0
  246.         MOVE.L  -(A3),pubArrays.PTSIN(A0)
  247.         MOVE.W  #ESCAPE,(A3)+
  248.         MOVE.W  #V_DSPCUR,(A3)+
  249.         JSR     vdi_if
  250.   END;
  251. END DisplayCursor;
  252.  
  253. PROCEDURE RemoveCursor(handle:DeviceHandle);
  254.  
  255.   BEGIN
  256.     ASSEMBLER
  257.         MOVE.W  #ESCAPE,(A3)+
  258.         MOVE.W  #V_RMCUR,(A3)+
  259.         JSR     vdi_if
  260.     END;
  261.   END RemoveCursor;
  262.  
  263. (*      Folgende Routinen sind nur bei geladenem GDOS verfügbar.
  264.  *)
  265.  
  266. PROCEDURE FormAdvance (handle:DeviceHandle);
  267.  
  268.   BEGIN
  269.     ASSEMBLER
  270.         MOVE.W  #ESCAPE, (A3)+
  271.         MOVE.W  #V_FORM_ADV, (A3)+
  272.         JSR     vdi_if
  273.     END;
  274.   END FormAdvance;
  275.  
  276. PROCEDURE OutputWindow (handle:DeviceHandle; frame:Rectangle);
  277.  
  278.   BEGIN
  279.     ASSEMBLER
  280.         MOVE.L  pubs, A0
  281.         LEA     pubArrays.PTSIN+8(A0), A1
  282.         JSR     getCalcedFrame
  283.         MOVE.W  #ESCAPE, (A3)+
  284.         MOVE.W  #V_OUTPUT_WINDOW, (A3)+
  285.         JSR     vdi_if
  286.     END;
  287.   END OutputWindow;
  288.          
  289. PROCEDURE ClearDisplayList (handle:DeviceHandle);
  290.  
  291.   BEGIN
  292.     ASSEMBLER
  293.         MOVE.W  #ESCAPE, (A3)+
  294.         MOVE.W  #V_CLEAR_DISP_LIST, (A3)+
  295.         JSR     vdi_if
  296.     END;
  297.   END ClearDisplayList;
  298.          
  299. PROCEDURE OutputBitImage (handle:DeviceHandle; REF fname:ARRAY OF CHAR;
  300.                           aspect:AspectRatio; scaling: ScaleMode;
  301.                           numPts:CARDINAL; frame:Rectangle);
  302.                           
  303.   END OutputBitImage;
  304.          
  305. PROCEDURE SelectPalette (handle:DeviceHandle; palette:CARDINAL);
  306.  
  307.   END SelectPalette;
  308.          
  309. PROCEDURE GetFilmTypes (handle:DeviceHandle; VAR films:ARRAY OF CHAR);
  310.  
  311.   END GetFilmTypes;
  312.          
  313. PROCEDURE GetDriverState (handle:DeviceHandle; VAR port, film:CARDINAL;
  314.                           VAR lightness:INTEGER; VAR interlace:BOOLEAN;
  315.                           VAR planes:CARDINAL; VAR indexes:IndexArray);
  316.                           
  317.   END GetDriverState;
  318.          
  319. PROCEDURE SetDriverState (handle:DeviceHandle; port, film:CARDINAL;
  320.                           lightness:INTEGER; interlace:BOOLEAN;
  321.                           planes:CARDINAL; indexes:IndexArray);
  322.                           
  323.   END SetDriverState;
  324.          
  325. PROCEDURE SaveDriverState (handle:DeviceHandle);
  326.  
  327.   END SaveDriverState;
  328.          
  329. PROCEDURE SuppressPaletteMsg (handle:DeviceHandle);
  330.  
  331.   END SuppressPaletteMsg;
  332.          
  333. PROCEDURE PaletteError (handle:DeviceHandle): CARDINAL;
  334.  
  335.   END PaletteError;
  336.          
  337. PROCEDURE MetafileExtents (handle:DeviceHandle; min, max:Point);
  338.  
  339.   BEGIN
  340.     ASSEMBLER
  341.         MOVE.L  pubs, A0
  342.         MOVE.L  -(A3), pubArrays.PTSIN+4(A0)
  343.         MOVE.L  -(A3), pubArrays.PTSIN(A0)
  344.         MOVE.W  #ESCAPE, (A3)+
  345.         MOVE.W  #V_META_EXTENTS, (A3)+
  346.         JSR     vdi_if
  347.     END;
  348.   END MetafileExtents;
  349.  
  350. PROCEDURE WriteToMetafile (handle:DeviceHandle;
  351.                            numIntin:CARDINAL; REF vINTIN:ARRAY OF INTEGER;
  352.                            numPtsin:CARDINAL; REF ptsin:ARRAY OF INTEGER);
  353.  
  354.   (*$L+*)
  355.   BEGIN
  356.     ASSEMBLER
  357.         MOVE.L  handle(A6), (A3)+
  358.         ; MOVE.L  A1,-(A7)             (* !MS *)
  359.         SUBQ.L  #2,A7
  360.         MOVE.L  A7,(A3)+
  361.         JSR     setDevice
  362.         ; MOVE.W  (A7)+,(A3)+          (* !MS *)
  363.         ; MOVE.L  (A7)+,A1             (* !MS *)
  364.         TST.W   (A7)+                  (* !MS *)
  365.         BEQ     ende
  366.  
  367.         MOVE.L  our_cb,A0               ; Build up the ctrl-array
  368.         MOVE.L  A0, (A3)+               ; our_cb^ für vdi_call pushen !MS
  369.         MOVE.W  #ESCAPE,cb.V_CONTRL.opcode(A0)
  370.         MOVE.W  #V_WRITE_META,cb.V_CONTRL.subcmd(A0)
  371.         MOVE.L  cb.CURDEVICE(A0),A1
  372.         MOVE.W  device.handle(A1),cb.V_CONTRL.handle(A0)
  373.  
  374.         MOVE.W  numIntin(A6), cb.V_CONTRL.sintin(A0)
  375.         MOVE.W  numPtsin(A6), cb.V_CONTRL.sptsin(A0)
  376.         MOVE.L  cb.VDIPB.intin(A0), -(A7)
  377.         MOVE.L  cb.VDIPB.ptsin(A0), -(A7)
  378.         MOVE.L  vINTIN(A6), cb.VDIPB.intin(A0)
  379.         MOVE.L  ptsin(A6), cb.VDIPB.ptsin(A0)
  380.  
  381.         JSR     vdi_call
  382.  
  383.         MOVE.L  our_cb, A0
  384.         MOVE.L  (A7)+, cb.VDIPB.ptsin(A0)
  385.         MOVE.L  (A7)+, cb.VDIPB.intin(A0)
  386. ende
  387.     END;
  388.   END WriteToMetafile;
  389.   (*$L=*)
  390.  
  391. PROCEDURE SetVDIFileName (handle:DeviceHandle; REF fname:ARRAY OF CHAR);
  392.  
  393.   BEGIN
  394.     ASSEMBLER
  395.         MOVE.L  D4,-(A7)
  396.         CLR.W   D4                      ; Kein Offset
  397.         JSR     stringIntoINTIN
  398.         MOVE.W  -(A3),D0                ; Rückgabewert: Stringlänge
  399.         
  400.         MOVE.W  D0,-(A7)
  401.         SUBQ.L  #2,A7
  402.         MOVE.L  A7,(A3)+
  403.         JSR     setDevice
  404.         MOVE.W  (A7)+,D1
  405.         MOVE.W  (A7)+,D0
  406.         TST.W   D1
  407.         BEQ     ende
  408.         
  409.         MOVE.L  our_cb,A0
  410.         MOVE.L  A0,(A3)+                ; our_cb^ für vdi_call pushen
  411.         MOVE.W  #ESCAPE,cb.V_CONTRL.opcode(A0)
  412.         CLR.W   cb.V_CONTRL.sptsin(A0)
  413.         MOVE.W  D0,cb.V_CONTRL.sintin(A0)
  414.         MOVE.W  #VM_FILENAME,cb.V_CONTRL.subcmd(A0)
  415.         MOVE.L  cb.CURDEVICE(A0),A1
  416.         MOVE.W  device.handle(A1),cb.V_CONTRL.handle(A0)
  417.         JSR     vdi_call
  418. ende
  419.         MOVE.L  (A7)+,D4
  420.     END;
  421.   END SetVDIFileName;
  422.  
  423. PROCEDURE SetLineOffset (handle:DeviceHandle; offset:INTEGER);
  424.  
  425. BEGIN
  426.   ASSEMBLER
  427.         MOVE.L  pubs,A0
  428.         MOVE.W  -(A3),pubArrays.vINTIN(A0)
  429.         MOVE.W  #ESCAPE,(A3)+
  430.         MOVE.W  #V_OFFSET,(A3)+
  431.         JSR     vdi_if
  432.   END;
  433. END SetLineOffset;
  434.          
  435. PROCEDURE InitSystemFont (handle:DeviceHandle; fontHeader:ADDRESS);
  436.  
  437. BEGIN
  438.   ASSEMBLER
  439.         MOVE.L  pubs,A0
  440.         MOVE.L  -(A3),pubArrays.vINTIN(A0)
  441.         MOVE.W  #ESCAPE,(A3)+
  442.         MOVE.W  #V_FONTINIT,(A3)+
  443.         JSR     vdi_if
  444.   END;
  445. END InitSystemFont;
  446.          
  447.  
  448. END VDIEscapes.
  449. (* $FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFEDE4C8$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770$FFF8D770Ç$00000194T.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$FFEDE4C8$FFEDE4C8$FFEDE4C8$00000161$0000016C$00000175$00000194$00000188$FFEDE4C8$FFEC5652$000023C1$000023DF$FFEC5652$000024B6$000024D4$00000033áÇâ*)
  450.